# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素,
# def funa_a(a):
#     return a[1::2]
# l1 = [1, 2, 3, 4, 5]
# l2 = funa_a(l1)
# print(l2)
# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
# def fun_b(b):
#     if len(b) > 5:
#         return True
#     else:
#         return None


# l3 = (1,2,3,5,"string,list,tuple")
# l4 = fun_b(l3)
# print(l4)
# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
# count = 0
# def str1(string):
#4、写函数,接收两个数字参数,返回较大的那个数字
# def f_a(num1, num2):
#     if num1 > num2:
#         return num1
#     else:
#         return num2
# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
# 元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.
# def cacluate():
# 6、编写一个函数, 接收字符串参数, 返回一个元组,
# 元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)
# 和一个整形数k, 返回一个新列表.
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# 将下标k及之后的元素逆序;
#
# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值
# def calculate_expression(x, n):
#     expression = ""
#     total = 0
#     for i in range(1, n + 1):
#         term = str(x) * i
#         expression += term
#         total += int(term)
#         if i != n:
#             expression += " + "
#     print(f"表达式前{n}项：{expression}")
#     print("结果：", total)
# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
#
# 用户通过input输入这4个内容(支持持续输入,Q或q退出),并传递给函数
#
# 函数接收到这些内容,将其追加到student_msg文件中
#
# 重点:复习文件操作
#
# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
# def sum_1(numbers):
#     i = sum(numbers)
#     return i
# print(sum_1)
# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里

# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回
# def join_with_underscore(input_list):
#     result = "_".join(str(item) for item in input_list)
#     return result

# 13、写函数,传入一个数字,返回这个数的阶乘
# 重点:累乘
#
# 示例：1x2x3....
def dactorial(num):
    start = 1
    for i in range(1,num+1):
        start*=1
    return f"返回这个数的阶乘{start}"
print(factorial)
# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
def PlayingCardList():
    result_list = []
    list1 = ['红片','红桃','黑片','黑桃']
    list2 = ['J','Q','K','A']
    for i in list1:
        for j in range(2,11):
            result_list.append((i,j))
    for i in list1:
        for j in list1:
            result_list.append((i,j))
    return  result_list
print(PlayingCardList())
 # 15、用代码写一个99乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print(f"{i}*{j}={i*j}",end=" ")
    print()
# 16、编写函数，求1+2+3+…N的和
# def f_c(N):
# sum2 = 0
# for i in rangge(1,N+1):
#     sum2 += i
# print(sum_2)
# 17、编写一个函数，求多个数中的最大值
max1 = 0
def f_q(a):
    for i in f_q:
        if max1 < i:
            max1 = i
print(f"最大的是{max1}")
# 18、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
def newstr(str1):
    new_str = ""
    for i in str1:
        if (i >= 'a' and i <= "z") or (i >= "A" and i <="Z"):
            new_str+=i
    return nwe_str
# 19、 定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市， 使用默认参数降低调用函数的复杂度
def enroll(name, gender, age, city=""):
    print("学生姓名:", name)
    print("性别:", gender)
    print("年龄:", age)
    print("城市:", city)


# 20、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
def capitalization_str(str1):
    return str1.capitalize()
print(capitalization_str("abc"))
# 21、写一个函数，求多个数的平均值
# def average(args):
#     if len(args) == 0:
#         return 0
#     total = sum(args)
#     avg = total / len(args)
#     return avg
# 22、写一个自己的len函数，统计指定序列中元素的个数
def f_e(a):
    count = 0
    for i in a:
        count += 1
    return count

# 23、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表

# 24、编写一个函数，接受一个字符串列表作为参数，并返回一个字符串，其中包含所有字符串首字母的大写形式
#
# 25、定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# # 数组中的每个元素值不允许超过 100，但是可以等于100，
# # 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
#
# # 删除所有重复元素，使得每个元素只出现一次
# # 按照数字的大小，由高到低排序返回
#
# 26、定义函数 getLength，打印用户传入的容器类型和数据长度
# def f_wh(a):
#     a_type = type(data)
#     a_length = len(data)
#
#     print(f"容器类型: {ar_type}")
#     print(f"数据长度: {a_length}")
# 27、定义函数 generateNum( )
# # 返回从0~9的十个数字中随机取出4个不重复的数字组成一个字符串
def generateNum():
    import random
    str1=""
    while True:
        num = random.randint(0,9)
        if str(num) not in str1:
            str1+=str(num)
        if len(str1) >= 4:
            str1 = str1[:4]:
            break
        return str1
print(generateNum())
# 28、定义函数 moreThan(num)，判断输入的数字是否大于1500
def moreThan(num):
    if num > 1500:
        return True
    else:
        return None
# 29、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
#
# 示例：func_a(5,10)
# 5x5+6x6+7x7+8x8+9x9+10x10...
#
# 30、写函数，检查传入字典的每一个value长度，如果大于2，
# # 那么仅保留前两个长度的内容， 并将新内容返回给调用者
#
# 31、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
# def strde(a):
#     if a:
#         print("不是空的")
#     else:
#         print("空的")
# strde()
# 32、编写自定义函数，完成一个简单的减法运算函数
def na(a,b):
    return a-b
# 33、编写自定义函数，可以输出自己的名字即可。
def na_1(a):
    return a
# 34、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
#
# 当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
#
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
#
# 1 代表剪刀 2 代表石头 3 代表布
#
# 35、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
def na_3(a):
    return a[::-1]
# 36、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
def na_4(a):
    for num in na_4:
        if num % 2 == 0:
            return (num)
print()
# 37、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
def str2(s):
    k=""
    for i in s:
        if len(i)>len(k):
            k=i
    return k
print(str2(s))


# 38、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和
def na_6(a):
    sum = 0
    for i in a:
        sum = a*a+sum
    return sum
print(na_6())
# 39、编写一个函数，接受一个整数作为参数，并返回其阶乘